export const getBrowserInfo = () => {
  const ua = navigator.userAgent;
  let name = '';
  let version = '';

  // 判断是否为 Chrome 浏览器
  if (/Chrome\/([\d.]+)/.test(ua)) {
    name = 'Chrome';
    version = RegExp.$1;
  }
  // 判断是否为 Firefox 浏览器
  else if (/Firefox\/([\d.]+)/.test(ua)) {
    name = 'Firefox';
    version = RegExp.$1;
  }
  // 判断是否为 Safari 浏览器
  else if (/Safari\/([\d.]+)/.test(ua)) {
    name = 'Safari';
    version = RegExp.$1;
  }
  // 判断是否为 IE 浏览器
  else if (/Trident\/([\d.]+)/.test(ua)) {
    name = 'Internet Explorer';
    version = RegExp.$1;
  }
  // 判断是否为 Edge 浏览器
  else if (/Edge\/([\d.]+)/.test(ua)) {
    name = 'Edge';
    version = RegExp.$1;
  }
  // 判断是否为 Opera 浏览器
  else if (/OPR\/([\d.]+)/.test(ua)) {
    name = 'Opera';
    version = RegExp.$1;
  }
  // 其他浏览器
  else {
    name = 'Unknown';
    version = 'Unknown';
  }

  return {
    name,
    version,
  };
};

export function convertToKebabCase(str: string) {
  // TODO:是否可以直接用lodash方法：kebabCase()
  return str
    .toLowerCase() // Convert to lowercase
    .replace(/\s+|\/|_/g, '-'); // Replace spaces, slashes, and underscores with hyphens
}

export function convertToTitleCase(str: string) {
  // TODO:是否可以直接用lodash方法：startCase()
  return str
    .replace(/-/g, ' ') // Replace all hyphens with spaces
    .replace(/_/g, ' ') // Replace all underscores with spaces
    .replace(/\//g, ' ') // Replace all slashes with spaces
    .replace(/\b(\w)/g, function (char) {
      return char.toUpperCase();
    }); // Capitalize the first letter of each word
}

// secondVal: For example in 1 - 10 of 160 it's 10
// totalItems: For example in 1 - 10 of 160 it's 160
export function getCurrentTablePage(totalItems: number, secondVal: number, recordsPerPage: number) {
  const totalPages = Math.ceil(totalItems / recordsPerPage);
  const diff = totalItems - secondVal;
  const pagesLeft = Math.ceil(diff / recordsPerPage);
  return totalPages - pagesLeft;
}

export const obj2Param = (obj: { [key: string]: any }) => {
  const paramList = Object.keys(obj).reduce((paramList: string[], key: string) => {
    const val = obj[key];
    if (val !== 0 && val !== null && val !== undefined && val !== '') {
      paramList.push(`${key}=${val}`);
    }
    return paramList;
  }, []);
  return paramList.length ? `?${paramList.join('&')}` : '';
};

// 获取数组符合条件的项放在最前面
// TODO:使用lodash.groupBy()实现
export const moveItemToFront = <T>(array: T[], conditionFn: (item: T) => boolean) => {
  // 使用 filter 方法分别找出满足条件和不满足条件的项
  const matches = array.filter(conditionFn);
  const nonMatches = array.filter((item) => !conditionFn(item));

  // 使用 concat 方法将满足条件的项放在前面
  return matches.concat(nonMatches);
};

/**
 * 判断path是否为外链
 * @param {string} path
 * @returns {Boolean}
 */
export const isExternal = (path: string): boolean => {
  return /^(https?:|mailto:|tel:)/.test(path);
};

//#AI/S;
/**
 * 验证给定的字符串是否为有效的数字格式。如果不是，则清除输入框的内容。
 * 有效数字格式是指整数或最多两位小数的数字。
 * 例如：'123'，'12.3'，'1.23' 是有效的，而 '12.345' 被认为是无效的，应被清除。
 *
 * @param {string} input - 要验证的字符串。
 */
export function validateNumbers(input: string, limit: number = 2) {
  // 正则表达式，允许数字和小数点
  const regex = new RegExp('^\\d*(\\.\\d{0,' + limit + '})?$');

  // 检查输入值是否符合正则表达式
  if (!regex.test(input)) {
    // 如果不符合，清除输入框的内容
    input = input.slice(0, -1);
  }
}
//#AI/E
